package com.ywt.cda.core.dao;

import java.io.Serializable;
import java.util.List;
import java.util.Map;

import com.ywt.cda.core.dao.page.Page;

public abstract class IBatisEntityDao<T extends BaseEntity> extends
		IBatisGenericDao {
	/**
	 * DAO所管理的Entity类型.
	 */
	private Class<T> entityClass;

	/**
	 * 在构造函数中将泛型T.class赋给entityClass.
	 */
	@SuppressWarnings("unchecked")
	public IBatisEntityDao() {
		entityClass = GenericsUtils.getSuperClassGenricType(getClass());
	}

	/**
	 * 以下为根据条件获取某个对象============================================================
	 * ===========================
	 */

	/**
	 *
	 * @description get(根据id值获取对象)
	 * @conditions (这里描述这个方法适用条件 – 可选)
	 * @param id
	 * @return T
	 * @exception
	 * @since 1.0.0
	 */
	public T get(Serializable id) {
		return get(getEntityClass(), id);
	}

	/**
	 *
	 * @description get(根据传入的对象得到对象唯一值)
	 * @conditions (这里描述这个方法适用条件 – 可选)
	 * @param map
	 * @return T
	 * @exception
	 * @since 1.0.0
	 */
	public T get(Map<String, String> map) {
		return getEntityByMap(getEntityClass(), map);
	}

	/**
	 * 以下为根据条件获取list和分页查询======================================================
	 * =================================
	 */

	/**
	 *
	 * @description query(根据某个对象传入值查询得到list)
	 * @conditions (这里描述这个方法适用条件 – 可选)
	 * @param map
	 * @return List<T>
	 * @exception
	 * @since 1.0.0
	 */
	public List<T> query(Map<String, Object> map) {
		return queryListByMap(getEntityClass(), map);
	}

	/**
	 *
	 * @description queryCount(根据某个对象传入值查询得到count)
	 * @conditions (这里描述这个方法适用条件 – 可选)
	 * @param map
	 * @return Integer
	 * @exception
	 * @since 1.0.0
	 */
	public Integer queryCount(Map<String, String> map) {
		return queryCountByMap(getEntityClass(), map);
	}

	/**
	 *
	 * @description queryPaged(根据传入的map得到list，记录总数，分页)
	 * @conditions (这里描述这个方法适用条件 – 可选)
	 * @param parameterObject
	 * @return Page
	 * @exception
	 * @since 1.0.0
	 */
	public Page queryPaged(Map<String, String> parameterObject, Page page) {
		return queryPaged(getEntityClass(), parameterObject, page);
	}
	public Page queryPaged_(Map<String, Object> parameterObject, Page page) {
		return queryPaged_(getEntityClass(), parameterObject, page);
	}
	public int delete(Serializable id) {
		return delete(getEntityClass(), id);
	}

	/**
	 * 取得entityClass.
	 */
	protected Class<T> getEntityClass() {
		return entityClass;
	}

	
}
